جزوه · پیدا کردن فایل‌ها با find بازگشت به فهرست
📘 جستجوی پیشرفته پیدا کردن فایل‌ها با find
📅 تاریخ: ۱۹ مرداد ۱۴۰۵ 👤 مدرس: محمد عابدینی 🐚 Zsh · 🐧 Debian

▍ مقدمه

فرمان find یکی از قدرتمندترین ابزارهای لینوکس برای جستجوی فایل‌ها و دایرکتوری‌ها است. با استفاده از find می‌توانید بر اساس نام، نوع، اندازه، زمان تغییر، مجوزها و بسیاری معیارهای دیگر جستجو کنید.

🔑 ساختار کلی:
find [مسیر جستجو] [معیارهای جستجو] [اقدامات]
  • مسیر جستجو: از کجا شروع به جستجو کند (مثلاً . یا /home)
  • معیارهای جستجو: شرایط فایل (مثل -name، -type)
  • اقدامات: روی فایل‌های پیدا شده چه کاری انجام بده (مثل -print، -exec)

▍ جستجو با نام فایل

• جستجوی دقیق با -name

┌──(ya3in㉿kali)-[~] └─$ find . -name "file.txt"

توضیح: فایل‌های file.txt را در دایرکتوری جاری و زیردایرکتوری‌ها پیدا می‌کند.

⚠️ نکته مهم:

-name به حروف بزرگ و کوچک حساس است. یعنی file.txt با File.txt فرق دارد.

• جستجوی بدون حساسیت به حروف بزرگ/کوچک با -iname

┌──(ya3in㉿kali)-[~] └─$ find . -iname "file.txt"

توضیح: فایل‌های file.txt، File.TXT، FILE.TXT و ... را پیدا می‌کند.

• استفاده از الگو (Pattern)

┌──(ya3in㉿kali)-[~] └─$ find . -name "*.txt"

توضیح: همه فایل‌هایی که به .txt ختم می‌شوند را پیدا می‌کند.

┌──(ya3in㉿kali)-[~] └─$ find /home -name "*.conf"

توضیح: همه فایل‌های .conf را در دایرکتوری /home و زیردایرکتوری‌های آن پیدا می‌کند.

▍ جستجو بر اساس نوع

گزینه توضیح
-type f فقط فایل‌های معمولی (Regular Files)
-type d فقط دایرکتوری‌ها
-type l فقط لینک‌های سمبلیک (Symbolic Links)
-type b فایل‌های بلاک (Block Devices)
-type c فایل‌های کاراکتری (Character Devices)
┌──(ya3in㉿kali)-[~] └─$ find . -type d -name "Downloads"

توضیح: دایرکتوری‌های Downloads را در دایرکتوری جاری پیدا می‌کند.

▍ جستجو بر اساس اندازه

گزینه توضیح مثال
-size +N بزرگ‌تر از N -size +100M
-size -N کوچک‌تر از N -size -10k
-size N دقیقاً N -size 1M
┌──(ya3in㉿kali)-[~] └─$ find / -type f -size +100M

توضیح: فایل‌های بزرگ‌تر از ۱۰۰ مگابایت را در کل سیستم پیدا می‌کند.

┌──(ya3in㉿kali)-[~] └─$ find . -type f -size -1M

توضیح: فایل‌های کوچک‌تر از ۱ مگابایت را در دایرکتوری جاری پیدا می‌کند.

▍ جستجو بر اساس زمان

گزینه توضیح
-mtime -N تغییر یافته در کمتر از N روز قبل
-mtime +N تغییر یافته در بیشتر از N روز قبل
-mtime N تغییر یافته دقیقاً N روز قبل
-amin -N دسترسی در کمتر از N دقیقه قبل (Access)
-cmin -N تغییر در کمتر از N دقیقه قبل (Change)
┌──(ya3in㉿kali)-[~] └─$ find . -type f -mtime -7

توضیح: فایل‌هایی که در ۷ روز اخیر تغییر کرده‌اند.

┌──(ya3in㉿kali)-[~] └─$ find . -type f -mtime +30

توضیح: فایل‌هایی که بیش از ۳۰ روز از تغییر آنها می‌گذرد.

▍ اقدامات روی فایل‌های پیدا شده

• -print (نمایش) - پیش‌فرض

┌──(ya3in㉿kali)-[~] └─$ find . -name "*.txt" -print

• -exec (اجرای دستور روی فایل‌ها)

┌──(ya3in㉿kali)-[~] └─$ find . -name "*.tmp" -exec rm {} \;

توضیح: همه فایل‌های .tmp را پیدا کرده و حذف می‌کند.

💡 نکته:
  • {} → جایگزین نام فایل می‌شود
  • \; → پایان دستور -exec (نقطه‌ویرگول)
  • اگر فایل‌ها نام‌های با فاصله دارند، از + به جای \; استفاده کنید:
    find . -name "*.txt" -exec ls -l {} +

• -delete (حذف مستقیم)

┌──(ya3in㉿kali)-[~] └─$ find . -name "*.tmp" -delete

توضیح: فایل‌های .tmp را مستقیم حذف می‌کند.

▍ ترکیب با xargs

برای اجرای دستورات پیچیده‌تر، find را با xargs ترکیب کنید:

┌──(ya3in㉿kali)-[~] └─$ find . -name "*.log" -print0 | xargs -0 rm

توضیح: حذف فایل‌های لاگ با استفاده از xargs.

▍ مثال‌های کاربردی

┌──(ya3in㉿kali)-[~] └─$ find /var/log -name "*.log" -type f -mtime +30

پیدا کردن فایل‌های لاگ قدیمی‌تر از ۳۰ روز در /var/log.

┌──(ya3in㉿kali)-[~] └─$ find . -type f -perm 777 -ls

پیدا کردن فایل‌هایی با مجوزهای ۷۷۷ (همه‌کاره).

┌──(ya3in㉿kali)-[~] └─$ find . -maxdepth 2 -name "*.txt"

پیدا کردن فایل‌های .txt فقط تا ۲ سطح عمق.

✅ تمرین پیشنهادی:
  • همه فایل‌های .pdf را در دایرکتوری /home پیدا کنید.
  • فایل‌های بزرگ‌تر از ۵۰ مگابایت را در دایرکتوری جاری پیدا کنید.
  • فایل‌هایی که در ۳ روز اخیر تغییر کرده‌اند را پیدا کنید.
  • همه دایرکتوری‌های خالی را با -empty پیدا کنید.
  • فایل‌های .tmp را با -exec حذف کنید.

▍ جمع‌بندی

مفهوم دستور
جستجو با نام دقیق find . -name "file.txt"
جستجو بدون حساسیت به حروف find . -iname "file.txt"
جستجو با الگو find . -name "*.txt"
فقط فایل‌ها find . -type f
فقط دایرکتوری‌ها find . -type d
بر اساس اندازه find . -size +100M
بر اساس زمان تغییر find . -mtime -7
اجرای دستور روی فایل‌ها find . -name "*.txt" -exec ls -l {} \;
حذف فایل‌ها find . -name "*.tmp" -delete
جستجو با عمق محدود find . -maxdepth 2 -name "*.txt"